/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Modelo.DiasFeriados;
import Modelo.Listas;
import Modelo.Multa;
import Modelo.UnidadT;
import Modelo.Validaciones;
import Modelo.Viaje;
import Vista.JFrameMultas;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;

public class ControladorMultas implements ActionListener {

    private JFrameMultas formMultas;
    private Listas list;

    public ControladorMultas(Listas lis) {
        list = lis;
        formMultas = new JFrameMultas();
        formMultas.agregarListener(this);
        formMultas.setVisible(true);
        formMultas.setLocationRelativeTo(null);
        AsignarCodigoMulta();
        LlenarComboDiasF();
        Enabled(false);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formMultas.getCmbDiasFeriados())) {
            Enabled(true);
        }
        if (e.getSource().equals(formMultas.getBtnBuscar())) {
            new ControladorConsulMultas(list);
        }
        if (e.getSource().equals(formMultas.getBtnEliminar())) {
            Limpiar();
        }
        if (e.getSource().equals(formMultas.getBtnGuardar())) {
            Registrar();
        }
        if (e.getSource().equals(formMultas.getBtnSalir())) {
            formMultas.dispose();
        }
        if (e.getSource().equals(formMultas.getBtnViajeAleatorio())) {
            GenerarViajeAleatorio();
        }
    }

    private void LlenarComboDiasF() {
        formMultas.getCmbDiasFeriados().removeAllItems();
        for (int i = 0; i < list.getListaFeriados().size(); i++) {
            Date feriados;
            DateFormat df = DateFormat.getDateInstance();
            feriados = list.getListaFeriados().get(i).getFecha();
            String f = df.format(feriados);
            formMultas.getCmbDiasFeriados().addItem(f);
        }
        formMultas.getCmbDiasFeriados().setSelectedIndex(-1);

    }

    private void GenerarViajeAleatorio() {

        if (formMultas.getCmbDiasFeriados().getSelectedIndex() == -1) {
            Mensajes.Aviso("Seleccione un dia Feriado", "");
            return;
        }

        LinkedList<Viaje> ViajesXDia = new LinkedList<Viaje>();
        String diaF = formMultas.getCmbDiasFeriados().getSelectedItem().toString();
        String CISocio = "";
        Date feriados;
        for (int i = 0; i < list.getListaViajes().size(); i++) {

            feriados = list.getListaViajes().get(i).getFechaSalida();
            DateFormat df = DateFormat.getDateInstance();
            String f = df.format(feriados);
            if (f.equals(diaF)) {
                ViajesXDia.add(list.getListaViajes().get(i));

            }
        }
        
        int AleaViaje = Validaciones.Generar_Aleatorio(ViajesXDia.size());
      
            Viaje viaje = ViajesXDia.get(AleaViaje);
            for (int j = 0; j < list.getListaUnidadT().size(); j++) {
                if (list.getListaUnidadT().get(j).getPlaca().equals(viaje.getPlacaVehiculo())) {
                    CISocio = list.getListaUnidadT().get(j).getCISocio();
                }
            }

            formMultas.getTxtCodViaje().setText(viaje.getCodViaje());
            formMultas.getTxtPlacaV().setText(viaje.getPlacaVehiculo());
            formMultas.getTxtCedChofer().setText(viaje.getCiEmpleado());
            formMultas.getTxtCedSocio().setText(CISocio);
            formMultas.getTxtCodCoop().setText(viaje.getCodCooperativa());

        }

    
    private void Registrar() {
        Multa multa = new Multa();
        String Cadena;
        String codViaje;
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

        if (formMultas.getCmbDiasFeriados().getSelectedIndex() == -1) {
            Mensajes.Aviso("Seleccione un dia feriado", "");
            formMultas.getCmbDiasFeriados().requestFocusInWindow();
            Enabled(false);
            return;
        }

        Cadena = formMultas.getTxtCodViaje().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Seleccione un viaje", "");
            formMultas.getBtnViajeAleatorio().requestFocusInWindow();
            return;
        }

        codViaje = formMultas.getTxtCodViaje().getText();
        if (list.ExisteMultaViaje(codViaje) != -1) {
            Mensajes.Aviso("Este Vehículo ya fue multado en este Viaje", "");
            Limpiar();
            Enabled(false);
            formMultas.getCmbDiasFeriados().requestFocusInWindow();
            return;
        }

        multa.Multa(formMultas.getLblCodMulta().getText(),
                formMultas.getTxtCodViaje().getText(),
                Validaciones.CnvStringFecha(formMultas.getCmbDiasFeriados().getSelectedItem().toString()),
                formMultas.getTxtPlacaV().getText(),
                formMultas.getTxtCodCoop().getText(),
                formMultas.getTxtCedChofer().getText(),
                formMultas.getTxtCedSocio().getText());
        list.getListaMultas().add(multa);
        Mensajes.Aviso("Multa agregada con exito", "");
        Limpiar();
        Enabled(false);
        formMultas.getCmbDiasFeriados().requestFocusInWindow();
        AsignarCodigoMulta();

    }

    private void AsignarCodigoMulta() {
        int nroM = list.getListaMultas().size() + 1;
        formMultas.getLblCodMulta().setText("M000" + nroM);
    }

    private void Limpiar() {
        formMultas.getCmbDiasFeriados().setSelectedIndex(-1);
        formMultas.getTxtCodViaje().setText("");
        formMultas.getTxtPlacaV().setText("");
        formMultas.getTxtCedChofer().setText("");
        formMultas.getTxtCedSocio().setText("");
        formMultas.getTxtCodCoop().setText("");
        Enabled(false);
    }

    private void Enabled(boolean Status) {
        formMultas.getCmbDiasFeriados().setEnabled(!Status);
        formMultas.getBtnViajeAleatorio().setEnabled(Status);
    }
}
